【JavaScript】super - スーパークラスのメソッド呼び出し
JavaScriptのsuperキーワードを解説します。
検証環境
super
superキーワードは“スーパークラスを表すキーワード”です。
クラス内で使用し、スーパークラスのメソッド等へのアクセスを実現します。
また、オーバーライドしたメソッドでもsuperキーワードを使うことで、スーパークラスのメソッドを呼び出すことが可能です。
コンストラクタ
コンストラクタはメソッド名が決まっているため、定義するとスーパークラスのコンストラクタを必ずオーバーライドします。
コンストラクタをオーバーライドした場合、JavaScriptではスーパークラスのコンストラクタの呼び出しが必須になります。
基本構文
class サブクラス名 extends スーパークラス名 {
constructor( 仮引数1, 仮引数2 ... ) {
super( 実引数1, 実引数2 ... );
// 初期化...
}
}
super()
がスーパークラスのコンストラクタ呼び出しです。
サンプル
class Person {
name;
constructor( name ) {
this.name = name;
}
greeting() {
console.log("Hello");
console.log("My name is " + this.name);
}
}
class Teacher extends Person {
subject;
constructor( name, subject ) {
___ih_hl_start
super(name);
___ih_hl_end
this.subject = subject;
}
}
let t = new Teacher("TANAKA", "Programming");
t.greeting();
console.log(t.subject);
Hello
My name is TANAKA
Programming
18行目がスーパークラスのコンストラクタの呼び出しです。
実行結果でname
プロパティの値を設定できていることが確認でき、正常に実行したことが分かります。
メソッド
サブクラスからスーパークラスのメソッドを呼び出すことが可能です。
一般的にオーバーライドで処理を引き継ぎたい場合に使用します。
基本構文
super.メソッド名( 実引数1, 実引数2 ... )
サンプル
上記コンストラクタのサンプルにgreeting
メソッドのオーバーライドを追加します。
class Person {
name;
constructor( name ) {
this.name = name;
}
greeting() {
console.log("Hello");
console.log("My name is " + this.name);
}
}
class Teacher extends Person {
subject;
constructor( name, subject ) {
super(name);
this.subject = subject;
}
___ih_diff_start
+ greeting() {
+ super.greeting();
+ console.log("Subject : " + this.subject);
+ }
___ih_diff_end
}
let t = new Teacher("TANAKA", "Programming");
t.greeting();
___ih_diff_start
-console.log(t.subject);
___ih_diff_end
Hello
My name is TANAKA
Subject : Programming
23行目のsuper.greeting()
がスーパークラスのメソッド呼び出しです。
実行結果からスーパークラスのgreeting
メソッドの処理が実行されたことが確認できます。